package com.lnt.java.thread.safe;

/**
 * <p>synchronized同样可以加在方法上，效果与代码块相似</p>
 */
public class TicketSafeSynchronizedMethodTest implements Runnable {

    private Integer ticket = 100;

    @Override
    public void run() {
        while (true) {
            saleTicket();
        }
    }

    private synchronized void saleTicket() {
        // 只要有票就一直卖出
        /*
         * 方法上加synchronized 同步锁的效果如果在方法中内部直接加synchronized块，他的lock相当于this
         */
        if (ticket > 0) {
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + " 卖了第" + ticket--);
        }
    }
}
